
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShockStrike_Controller : MonoBehaviour
{
    // 目标角色的状态
    [SerializeField] private CharacterStats targetStats;
    // 移动速度
    [SerializeField] private float speed;
    // 伤害值
    private int damage;

    // 动画控制器
    private Animator anim;
    // 是否已经触发
    private bool triggered;

    // 初始化
    void Start()
    {
        // 获取子对象中的动画组件
        anim = GetComponentInChildren<Animator>();
    }

    // 每帧更新一次
    void Update()
    {
        // 如果没有目标状态，返回
        if (!targetStats) return;

        // 如果已经触发，返回
        if (triggered)
        {
            return;
        }

        // 移动到目标位置
        transform.position = Vector2.MoveTowards(transform.position, targetStats.transform.position, speed * Time.deltaTime);
        // 使对象面向目标
        transform.right = transform.position - targetStats.transform.position;

        // 如果距离目标小于0.1f
        if (Vector2.Distance(transform.position, targetStats.transform.position) < .1f)
        {
            // 重置旋转和缩放
            anim.transform.localRotation = Quaternion.identity;
            transform.localRotation = Quaternion.identity;
            transform.localScale = new Vector3(3, 3);

            // 延迟0.1秒后调用DamageAndSelfDestroy方法
            Invoke("DamageAndSelfDestroy", .1f);
            // 设置为已触发
            triggered = true;
            // 触发动画
            anim.SetTrigger("Hit");
        }
    }

    // 设置伤害值和目标状态
    public void Setup(int _damage, CharacterStats _targetStats)
    {
        damage = _damage;
        targetStats = _targetStats;
    }

    // 造成伤害并自我销毁
    private void DamageAndSelfDestroy()
    {
        // 应用电击效果
        targetStats.ApplyShock(true);
        // 造成伤害
        targetStats.TakeDamage(damage);
        // 销毁对象
        Destroy(gameObject, .4f);
    }
}
